package com.wjw.java.others.annotation_;

/**
 * 元注解：用于修饰注解的注解,本身作用不大,看源码时可以知道他是干什么的
 * ---------------------------------------------------------------------------
 * @Retention：指定注解的作用范围,
 *   java源文件(xxx.java) --> javac --> class文件(xxx.class) --> java --> jvm加载运行
 *   SOURCE                  编译       CLASS                   运行      RUNTIME
 *
 *   RetentionPolicy.SOURCE：
 *     注解只在源代码中存在,编译成class之后,就没了。
 *     @Override就是这种注解
 *
 *   RetentionPolicy.CLASS：
 *     注解在java文件编程成.class文件后,依然存在,但是运行起来后就没了。
 *     @Retention的默认值,即当没有显式指定@Retention的时候,就会是这种类型。
 *
 *   RetentionPolicy.RUNTIME：
 *     注解在运行起来之后依然存在,程序可以通过反射获取这些信息
 *
 *   使用方式一：@Retention(RetentionPolicy.SOURCE)
 * ---------------------------------------------------------------------------
 * @Target：指定该注解可以在哪些位置使用,
 *   ElementType.TYPE：能修饰类、接口或枚举类型
 *   ElementType.FIELD：能修饰成员变量
 *   ElementType.METHOD：能修饰方法
 *   ElementType.PARAMETER：能修饰参数
 *   ElementType.CONSTRUCTOR：能修饰构造器
 *   ElementType.LOCAL_VARIABLE：能修饰局部变量
 *   ElementType.ANNOTATION_TYPE：能修饰注解
 *   ElementType.PACKAGE：能修饰包
 *   ElementType.TYPE_PARAMETER：
 *   ElementType.TYPE_USE：
 *
 *   使用方式一：@Target(ElementType.METHOD)
 *   使用方式二：@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
 * ---------------------------------------------------------------------------
 * @Documented：指定该注解是否会在javadoc体现
 * ---------------------------------------------------------------------------
 * @Inherited：表示子类会继承父类注解
 * ---------------------------------------------------------------------------
 */
public class MetaAnnotation {
}
